# 功能： 读取指定文件夹中的所有文本文件，并将文件名、文件大小、文件内容存储到数据库中
# 环境： Python 3.7.4 + mysql-connector-python 8.0.23
# 注意： 请先在数据库中创建名为video的表，并包含title、url、size三个字段
# 运行： 直接运行该脚本即可，无需其他操作


import os
import mysql.connector

def get_file_size_mb(file_path):
    # 获取文件大小
    size_in_bytes = os.path.getsize(file_path)
    size_in_mb = size_in_bytes/1024/1024
    return round(size_in_mb,2)


def batch_insert_file(folder_path):
    """ 读取文本文件并将其内容存储到一个集合中 """
    data_set = set()

    #获取文件夹中的所有文件
    files = os.listdir(folder_path)

    for filename in files:
        # 构建完整的文件路径
        file_path = os.path.join(folder_path,filename)

        if os.path.isfile(file_path):
            # 获取文件名和文件大小
            title = filename.split('.')[0]  # 标题是文件名去掉扩展名的部分
            file_size_mb =get_file_size_mb(file_path)

            # 将文件信息添加到集合中
            data_set.add((title, filename,file_size_mb))

    print("成功读取文本文件并存储到集合中")
    return data_set

def create_connection(host_name, user_name, user_password, db_name):
    connection = None
    try:
        connection = mysql.connector.connect(
            host=host_name,
            user=user_name,
            password=user_password,
            database=db_name
        )
        print("连接数据库成功")
    except mysql.connector.Error as error:
        print("连接数据库失败，错误信息：", error)
        return None

    return connection

def read_set_and_store_in_db(data_set, cursor,child_path):
    """ 遍历集合并将内容逐条插入到数据库中 """
    for title,filename, file_size_mb in data_set:
        try:
            cursor.execute('INSERT INTO video (title,url, size,folder) VALUES (%s,%s, %s,%S)', (title,filename, file_size_mb,child_path))
        except mysql.connector.Error as e:
            print(f"插入数据时出错: {title} - {file_size_mb} - {e}")

if __name__ == '__main__':
    # 数据库连接信息
    host_name = "localhost"
    user_name = "root"
    user_password = "Dream2060#*@*#"
    db_name = "tianya"

    # 创建数据库连接
    db_connection = create_connection(host_name, user_name, user_password, db_name)

    cursor = db_connection.cursor()

    # 文件夹路径
    public_path = 'E:/video/'
    #子文件夹路径
    child_path = "wuxia"

    folder_path = public_path + child_path

    data_set = batch_insert_file(folder_path)

    # 遍历集合并将内容保存到数据库
    read_set_and_store_in_db(data_set, cursor,child_path)

    # 提交更改并关闭连接
    db_connection.commit()
    db_connection.close()
    print("所有数据已成功保存到数据库")



